package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.TipoAcao;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="tipoAcaoFaces")
@ViewScoped
public class TipoAcaoFaces extends FacesUtil {
	
	private static final long serialVersionUID = 2291565653158082656L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<TipoAcao> logicaTipoAcao;
	
	private TipoAcao tipoAcao = new TipoAcao();
	private List<TipoAcao> listaTipoAcao = new ArrayList<>();
	private String tipoAcaoBusca;

	
	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaTipoAcao.adicionar(tipoAcao);
				adicionarMensagem("Ação adicionada com sucesso");
				this.buscarTipoAcao();
				fecharModal("dialogTipoAcao");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar a Ação");
		}
	}
	
	public void prepararAdicionar() {
		this.tipoAcao = new TipoAcao();
		abrirModal("dialogTipoAcao");
	}
	
	public void selecionarRegistro(Long idTipoAcao, boolean editar) {
		try {
			this.tipoAcao = logicaTipoAcao.obterPorId(TipoAcao.class, idTipoAcao);
			
			if (editar) {
				abrirModal("dialogTipoAcao");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaTipoAcao.editar(this.tipoAcao);
				adicionarMensagem("Ação editada com sucesso");
				fecharModal("dialogTipoAcao");
				this.buscarTipoAcao();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar a Ação");
		}
	}
	
	public void remover() {
		try {
			logicaTipoAcao.remover(TipoAcao.class, this.tipoAcao.getId());
			adicionarMensagem("Ação removida com sucesso");
			fecharModal("dialogExcluir");
			this.buscarTipoAcao();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover a Ação");
		}
	}
	
	public void buscarTipoAcao() {
		if (listaTipoAcao != null) {
			this.listaTipoAcao.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(tipoAcaoBusca)) {
				this.listaTipoAcao =  logicaTipoAcao.buscarTodos(TipoAcao.class, "acao");
			} else {
				this.listaTipoAcao = logicaTipoAcao.buscarPorCampo(TipoAcao.class, "acao", tipoAcaoBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.tipoAcao.getAcao())) {
			adicionarMensagem("O campo ação é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setlogicaTipoAcao(DefaultLogicaContract<TipoAcao> logicaTipoAcao) {
		this.logicaTipoAcao = logicaTipoAcao;
	}

	public List<TipoAcao> getListaTipoAcao() {
		return listaTipoAcao;
	}

	public void setListaTipoAcao(List<TipoAcao> listaTipoAcao) {
		this.listaTipoAcao = listaTipoAcao;
	}

	public String getTipoAcaoBusca() {
		return tipoAcaoBusca;
	}

	public void setTipoAcaoBusca(String TipoAcaoBusca) {
		this.tipoAcaoBusca = TipoAcaoBusca;
	}

	public TipoAcao getTipoAcao() {
		return tipoAcao;
	}

	public void setTipoAcao(TipoAcao TipoAcao) {
		this.tipoAcao = TipoAcao;
	}
	
	
}